로딩 중이에요... 🐣
04 로그인 기능 구현 및 URL View Template 연결 | ✅ 편저: 코담 운영자
4강 - 로그인 기능 구현 및 URL-View-Template 연결
url-view-template 연결✨ 이번 강의 목표
- 사용자 로그인 기능 구현
- URL → View → Template 흐름 이해 및 연결
- Django 기본 로그인 로직 활용
🗂️ 프로젝트 디렉토리 구조 요약
django_instagram/
├── config/
│ └── settings/
│ └── base.py
│ └── urls.py
├── django_instagram/
│ └── users/
│ ├── urls.py
│ ├── views.py
│ └── posts/
│ ├── urls.py
│ ├── views.py
├── templates/
│ ├── users/
│ │ └── main.html
│ ├── posts/
│ │ └── index.html
│ └── pages/
│ └── about.html
🔗 1. URL 설정
Django 프로젝트에서 URL 설정은 웹 요청을 해당 view 함수로 연결해주는 역할을 합니다. 이 단계에서는 각 앱(users, posts)에 대한 경로를 config/urls.py에 등록하고, 각각의 앱 내부에 urls.py 파일을 생성하여 기능별로 요청을 분기합니다.
config/urls.py
from django.conf import settings
from django.conf.urls.static import static
from django.contrib import admin
from django.urls import include, path
from django.views.generic import TemplateView
urlpatterns = [
path("about/", TemplateView.as_view(template_name="pages/about.html"), name="about"),
path(settings.ADMIN_URL, admin.site.urls),
path("users/", include("users.urls", namespace="users")),
path("accounts/", include("allauth.urls")),
path("posts/", include("posts.urls", namespace="posts")),
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
users/urls.py
from django.urls import path
from . import views
app_name = "users"
urlpatterns = [
path('main/', views.main, name="main")
]
posts/urls.py
from django.urls import path
from . import views
app_name = "posts"
urlpatterns = [
path('', views.index, name="index")
]
🧭 2. View 구현
View는 사용자의 요청을 처리하고, 적절한 응답(템플릿 렌더링 또는 리다이렉트 등)을 반환하는 함수입니다. 여기서는 로그인 요청을 처리하고 성공 시 게시물 페이지로 이동하거나 실패 시 에러 메시지를 표시합니다.
users/views.py
from django.shortcuts import render, redirect
from django.contrib.auth import authenticate, login
def main(request):
if request.method == 'POST':
username = request.POST.get('username')
password = request.POST.get('password')
user = authenticate(request, username=username, password=password)
if user is not None:
login(request, user)
return redirect('posts:index')
else:
return render(request, 'users/main.html', {"error_message": "로그인 실패"})
return render(request, 'users/main.html')
posts/views.py
def index(request):
return render(request, 'posts/index.html')
🖼️ 3. Template 작성
Template은 사용자에게 보여지는 HTML 페이지로, Django의 템플릿 언어를 활용하여 데이터를 동적으로 출력할 수 있습니다. 로그인 화면에서는 사용자 입력 폼과 에러 메시지 표시, 그리고 TailwindCSS로 스타일링된 UI를 구성합니다.
templates/users/main.html
<script src="https://unpkg.com/@tailwindcss/browser@4"></script>
<div class="w-full flex flex-col items-center justify-center min-h-screen bg-gray-100">
<div class="bg-white p-8 rounded-lg shadow-md w-full max-w-md text-center">
<h1 class="text-2xl font-bold text-gray-800 mb-6">로그인</h1>
<form action="{% url 'users:main' %}" method="post" class="space-y-4">
{% csrf_token %}
<input type="text" name="username" placeholder="사용자이름(아이디)" required class="w-full p-3 border border-gray-300 rounded-lg text-sm" />
<input type="password" name="password" placeholder="비밀번호" required class="w-full p-3 border border-gray-300 rounded-lg text-sm" />
{% if error_message %}
<div class="text-red-500 text-sm">{{ error_message }}</div>
{% endif %}
<button type="submit" class="w-full py-3 bg-blue-500 text-white text-lg rounded-lg hover:bg-blue-600">로그인</button>
</form>
</div>
<div class="mt-6">
<a href="{% url 'users:signup' %}" class="text-sm text-blue-500 hover:underline">회원가입</a>
</div>
</div>
templates/posts/index.html
<h1>여기는 posts index 화면입니다.</h1>
⚙️ 4. 앱 등록 및 슈퍼유저 생성
Django에서 생성한 앱을 프로젝트에 인식시키려면 settings/base.py
의 LOCAL_APPS
항목에 등록해야 합니다. 또한 관리자 계정(superuser)을 생성하면 admin 페이지 접근이 가능하며, 로그인 테스트도 수월해집니다.
settings/base.py
LOCAL_APPS = [
"users",
"posts",
]
슈퍼유저 생성
python manage.py createsuperuser
namespace 충돌 경고 발생 시 users 네임스페이스 중복 여부 확인 필요
✅ 정리
이번 강의에서는 Django의 기본 로그인 구조를 활용하여 로그인 흐름을 구현해보았습니다. 이 과정을 통해 URL → View → Template의 흐름을 이해하고, 사용자 인증의 기본 원리를 익힐 수 있습니다.
- Django의
authenticate
,login
기능을 활용한 로그인 처리 - 로그인 성공 시 posts:index 페이지로 리다이렉트
- 실패 시 에러 메시지 표시
- CSRF 토큰 사용 필수
다음 강의에서는 회원가입 기능을 구현합니다.